import tensorflow as tf
import numpy as np

# 定义输入特征和目标变量
features = np.random.rand(128, 20).astype(np.float32)  # 假设有128个样本，每个样本20个特征
labels = np.random.rand(128, 1).astype(np.float32)  # 假设有128个样本，每个样本1个目标值

# 定义模型参数
feature_columns = [tf.feature_column.numeric_column('feature', shape=[20])]

# 构建DNN模型
classifier = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[10, 10],  # 隐藏层单元数，这里有2层，第一层10个单元，第二层10个单元
    n_classes=2,  # 二分类问题
    optimizer='Adagrad',  # 优化器选择Adagrad
)

# 输入函数，用于给模型提供数据
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'feature': features},
    y=labels,
    num_epochs=10,  # 训练10个周期
    shuffle=True,  # 设置为True随机打乱数据
)

# 训练模型
classifier.train(input_fn=train_input_fn)

# 评估模型
eval_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'feature': features},
    y=labels,
    num_epochs=1,
    shuffle=False,
)
eval_results = classifier.evaluate(input_fn=eval_input_fn)
print(eval_results)

# 预测
predict_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'feature': features},
    num_epochs=1,
    shuffle=False,
)
predictions = list(classifier.predict(input_fn=predict_input_fn))